<?php
/*
 * description：
 * author：wh
 * email：
 * createTime：{2019/11/10} {14:51} 
 */

namespace app\middleware;


use libraries\errorcode\LoginError;
use libraries\errorcode\RequestError;
use libraries\Tools;

class ApiRedirect
{
    public function handle($request, \Closure $next)
    {
        if(strtolower(request()->module()) == 'api'){
            //已登录
            //if(!empty(SessionTools::getUser())){
            //
            //    //过期
            //    $check_result = $this->checkExpire();
            //    if($check_result['code'] !== 200){
            //        return json($check_result);
            //    }
            //
            //    //监控
            //    $verify_result = Monitor::handle();
            //    if($verify_result['code'] !== 200){
            //        return json($verify_result);
            //    }
            //
            //    return $next($request);
            //}


            //未登录(无需登录)

            //Remember URL start
            $last_url = strtolower('/'.request()->module().'/'.request()->controller().'/'.request()->action());
            //Remember URL end

            $white_url_arr = [
                //必须小写//不要用短横线隔开
                //'/api/verify/getcaptcha',
                //'/api/verify/checkcaptcha',
                //'/api/verify/dynamiccode',
                //'/api/verify/checkdynamiccode',
                //
                //'/api/forget/forget',
                //'/api/login/login',
                //'/api/login/islogin',
                //'/api/register/reg',
                //'/api/notify/index',//异步通知
                //测试（无下划线，方法小写）
                '/api/video/uploadvideo',
                '/api/realizedcash/run'
            ];

            //异步
            if(true !== request()->isAjax()){
                if(in_array($last_url, $white_url_arr)){

                    return $next($request);
                }

                return json('ERROR: '.LoginError::OFF_LINE_ERROR[0]);
            }


            //同步
            if(in_array($last_url, $white_url_arr)){

                return $next($request);
            }else{

                return json(Tools::set_result(LoginError::OFF_LINE_ERROR[0], LoginError::OFF_LINE_ERROR[1]));
            }
        }
        return $next($request);
    }

    protected function checkExpire(){

        if (time() - session('session_start_time') > config('app.api_session_expire')) {

            session_destroy();//真·销毁

            return Tools::set_result(LoginError::LOGIN_SESSION_INVALID[0], LoginError::LOGIN_SESSION_INVALID[1]);
        }
        return Tools::set_result(RequestError::SUCCESS[0], RequestError::SUCCESS[1]);
    }

}
